package com.offer;

/**
 * 面试题10：二进制中1的个数
 * 
 * 题目大致为： 实现一个函数，输入一个整数，输出该数二进制表示中1的个数。 
 * 思路：
 * 把一个整数减去1，再和原整数做与运算，会把最右边一个1变成0，那么一个整数的二进制表示中有多少个1，就可以进行多少次这样的操作。
 * 
 */
public class Item10 {
	public static void main(String args[]) {

		int n = 15;
		System.out.println("9的二进制表示中1的个数为：" + numberOf1(n));

	}

	/**
	 * 利用了与的操作
	 * 
	 * @param n
	 * @return
	 */
	public static int numberOf1(int n) {
		int count = 0;

		while (n != 0) {
			count++;
			System.out.println(Integer.toBinaryString(n-1) + "----" +  Integer.toBinaryString(n) + "----" + Integer.toBinaryString((n - 1) & n));
			n = (n - 1) & n;
			System.out.println();
		}

		return count;
	}

}